## DESCRIPTION
## Multivariable differential calculus: creating a contour plot
## ENDDESCRIPTION

## KEYWORDS('multivariable differential calculus', 'contour plot')

## DBsubject('WeBWorK')
## DBchapter('WeBWorK Tutorial')
## DBsection('Fort Lewis Tutorial 2011')
## Date('01/30/2011')
## Author('Paul Pearson')
## Institution('Fort Lewis College')
## TitleText1('')
## EditionText1('')
## AuthorText1('')
## Section1('')
## Problem1('')


####################################
#  Initialization

DOCUMENT();

loadMacros(
"PGstandard.pl",
"MathObjects.pl",
"PGgraphmacros.pl",
"unionTables.pl",
"parserPopUp.pl",
);

TEXT(beginproblem());

$refreshCachedImages=1;



##################################
#  Set-up

Context("Numeric")->variables->are(t=>"Real",x=>"Real",y=>"Real");

#
#  Create some graph canvases
#
$gr = init_graph(-5,-5,5,5,axes=>[0,0],pixels=>[300,300]);
$gr->lb('reset');
$gr->lb( new Label(4.7,0.2,'x','black','center','middle'));
$gr->lb( new Label(0.2,4.7,'y','black','center','middle'));


#
#  A subroutine for adding the color gradient to the graph object
#
sub makegradient # ($graph, $steps, $r0, $g0, $b0, $r1, $g1, $b1)
{
  my ($graph, $steps, $r0, $g0, $b0, $r1, $g1, $b1) = @_;
  my $dr = ($r1 - $r0) / $steps;
  my $dg = ($g1 - $g0) / $steps;
  my $db = ($b1 - $b0) / $steps;

  my $r = $r0;
  my $g = $g0;
  my $b = $b0;
  for my $i (0..$steps-1)
  {
    $graph->new_color("gradient$i",$r,$g,$b);
    $r += $dr;
    $g += $dg;
    $b += $db;
  }
  return $graph;
}

#
#  Add to $gr a 10 step color gradient
#
$gr = &makegradient($gr, 10, 
0,0,225,    # RGB blue
255,255,255 # RGB white
);


#
#  Circular contours as parametrized curves
#
foreach my $k (5,10,15,20,25,30,35,40,45) {
  my $a = sqrt($k);
  $fn = new Fun( 
     Formula("$a*cos(t)")->perlFunction, 
     Formula("$a*sin(t)")->perlFunction, 
     $gr 
  );
  $fn->domain(0,6.3);
  $fn->color("gray");
  $fn->steps(60);
  $fn->weight(1);
}


#
#  Fill with gradient colors between contours
#
foreach my $i (0..9) {
  my $a = sqrt(2)/2 * sqrt(5*$i) - 0.1; 
  $gr->fillRegion([ $a, $a, "gradient$i"]);
  $gr->fillRegion([-$a, $a, "gradient$i"]);
  $gr->fillRegion([-$a,-$a, "gradient$i"]);
  $gr->fillRegion([ $a,-$a, "gradient$i"]);
}

#
#  Label the contours
#
foreach my $k (5,15,25,35,45) {
  $gr->lb(  new Label(0.707*sqrt($k),0.707*sqrt($k),$k,'black','center','middle'));
}


$pop = PopUp(["Choose","True","False"],"False");


####################################
#  Main text

Context()->texStrings;
BEGIN_TEXT
\{ $pop->menu() \}  This could be a contour plot 
for \( f(x,y) = x^2 - y^2 \).
$BR
$BCENTER
\{ image(insertGraph($gr),width=>300,height=>300,tex_size=>450) \}
$ECENTER
END_TEXT
Context()->normalStrings;


#####################################
#  Answer evaluation

$showPartialCorrectAnswers = 0;

ANS( $pop->cmp() );


#####################################
#  Solution

Context()->texStrings;
BEGIN_SOLUTION
${PAR}SOLUTION:${PAR}
Solution explanation goes here.
END_SOLUTION
Context()->normalStrings;

COMMENT("MathObject version.");

ENDDOCUMENT();
